<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>RVM : MMTk</title>
	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
    </head>

    <body>
	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
		    <tr>
			    <td valign="top" class="pagebody">
				    <div class="pageheader">
					    <span class="pagetitle">
                            RVM : MMTk
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on May 30, 2009 by <font color="#0050B2">pizlo</font>.
				    </div>

				    <p>The garbage collectors for Jikes RVM are provided by MMTk. The <a href="http://cs.anu.edu.au/~Robin.Garner/mmtk-guide.pdf">MMTk: The Memory Manager Toolkit</a> describes MMTk and gives a tutorial on how to use and edit it and is the best place to start.</p>

<p>The RVM can be configured to employ various different allocation managers taken from the <a href="" title="MMTk">MMTk</a> memory management toolkit. Managers divide the available space up as they see fit. However, they normally subdivide the available address range to provide:</p>
<ul>
	<li>a metadata area which enables the manager to track the status of allocated and unallocated storage in the rest of the heap.</li>
	<li>an immortal data area used to service allocations of objects which are expected to persist across the whole lifetime of the RVM runtime.</li>
	<li>a large object space used to service allocations of objects which are larger than some specified size (e.g. a virtual memory page) - the large object space may employ a different allocation and reclamation strategy to that used for other objects.</li>
	<li>a small object allocation area which may be divided into e.g.two semi spaces, a nursery space and a mature space, a set of generations, a non-relocatable buddy hierarchy etc depending upon the allocation and reclamation strategy employed by the memory manager.</li>
</ul>


<p>Virtual memory pages are lazily mapped into the RVM's memory image as they are needed.</p>

<p>The main class which is used to interface to the memory manager is called <tt>Plan</tt>. Each flavor of the manager is implemented by substituting a different implementation of this class. Most plans inherit from class <tt>StopTheWorldGC</tt> which ensures that all active mutator threads (i.e. ones which do not perform the job of reclaiming storage) are suspended before reclamation is commenced. The argument passed to <tt>-X:processors</tt> determines the number of parallel collector threads that will be used for collection.</p>

<p>Generational collectors employ a plan which inherits from class <tt>Generational</tt> Inter alia, this class ensures that a write barrier is employed so that updates from old to new spaces are detected.</p>

<p>The RVM does not currently support concurrent garbage collection.</p>

<p>Jikes RVM may also use the <a href="Using GCSpy.html" title="Using GCSpy">GCSpy</a> visualization framework. GCSpy allows developers to observe the behavior of the heap and related data structures. </p>

				    
                    			    </td>
		    </tr>
	    </table>
	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td height="12" background="http://docs.codehaus.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
			</tr>
		    <tr>
			    <td align="center"><font color="grey">Document generated by Confluence on Jul 04, 2010 19:57</font></td>
		    </tr>
	    </table>
    </body>
</html>